package com.cnbot.dcidcard;

import android.content.Context;
import android.util.Log;

import com.decard.NDKMethod.BasicOper;
import com.decard.entitys.IDCard;

/**
 * Copyright (c) 2016--2019/3/15  Hunan Cnbot Co., Ltd. All Rights Reserved.
 *
 * @descriptoin 身份证读卡器API
 * @FileName: DcCardApi.java
 * @author: dc
 * @date: 2019/3/15 17:25
 * @version: 1.0
 */

public class DcCardApi {
    private static DcCardApi instance;
    private final String TAG = DcCardApi.class.getSimpleName();
    private Context context;

    public DcCardApi(Context ctx) {
        context = ctx;
    }

    public static synchronized DcCardApi getInstance(Context ctx) {
        if (instance == null) {
            synchronized (DcCardApi.class) {
                if (instance == null) {
                    instance = new DcCardApi(ctx);
                }
            }
        }
        return instance;
    }


    /**
     * 打开设备(已USB模式打开)
     *
     * @return
     */
    public int openUsbDevice() {
        int j = BasicOper.dc_AUSB_ReqPermission(context);
        Log.e(TAG, "USB权限 = " + j);
        //打开端口，usb模式，打开之前必须确保已经获取到USB权限，返回值为设备句柄号。
        //libusb使用之前确保设备已成功root,并且赋予应用永久使用超级管理员权限。
        // 返回值为设备句柄号。
        int devHandle = BasicOper.dc_open("LUSB", null, "", 0);
        if (devHandle > 0) {
            Log.d("open", "dc_open success devHandle = " + devHandle);
        }
        return devHandle;
    }


    /**
     * 单次读取身份证信息
     * 调用一次使用一次，不会循环调用
     *
     * @return
     */
    public IdCardInfoBean readSingleCardInfo() {
        /**
         * type 类型。
         1 - 读取文字信息、相片信息和指纹信息。
         2 - 读取追加住址信息。
         3 - 读取文字信息、相片信息、指纹信息和追加住址信息。
         */
        IDCard idCard = BasicOper.dc_SamAReadCardInfo(3);
        IdCardInfoBean idCardInfoBean = null;
        if(idCard!=null) {
            idCardInfoBean = new IdCardInfoBean(idCard.getName(), idCard.getSex(), idCard.getNation(), idCard.getBirthday(), idCard.getAddress(), idCard.getId(), idCard.getOffice(), idCard.getStartTime(), idCard.getEndTime(),idCard.getPhotoData());
        }
        return idCardInfoBean;
    }

    public IDCard loopReadCardInfo(int loopTime) {


        return null;
    }


    /**
     * 关闭端口，释放资源
     *
     * @return
     */
    public int closeUsbDevice() {
        int devHandle = BasicOper.dc_exit();
        return devHandle;
    }
}
